﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SIMCObjetoNegocio
{
    /// <summary>
    /// Referencia a la tabla de cla_atributos
    /// </summary>
    public partial class Atributo
    { 
        /// <summary>
        /// Codigo del atributo. Ej:
        /// PROF
        /// </summary>
        public string Id { get; set; }
        /// <summary>
        /// Nombre del atributo. Ej:
        /// Profesion
        /// </summary>
        public string Descripcion { get; set; }
        /// <summary>
        /// Tipo del atributo. Ej:
        /// PersonaNatural
        /// </summary>
        public TipoDeAtributo Tipo
        {
            get
            {
                switch (_Tipo)
                {
                    case "1":
                        return TipoDeAtributo.Personas;

                    case "2":
                        return TipoDeAtributo.PersonasNaturales;

                    case "3":
                        return TipoDeAtributo.PersonasJuridicas;

                    case "4":
                        return TipoDeAtributo.Valores;

                    case "5":
                        return TipoDeAtributo.ValoresRV;

                    case "6":
                        return TipoDeAtributo.ValoresRF;

                    case "7":
                        return TipoDeAtributo.ListaDeValores;

                    case "8":
                        return TipoDeAtributo.Sistema;

                    default:
                        throw new ArgumentException("No existe el tipo de atributo");
                }
            }
            set
            {
                switch (value)
                {
                    case TipoDeAtributo.Personas:
                        _Tipo = "1";
                        break;

                    case TipoDeAtributo.PersonasNaturales:
                        _Tipo = "2";
                        break;

                    case TipoDeAtributo.PersonasJuridicas:
                        _Tipo = "3";
                        break;

                    case TipoDeAtributo.Valores:
                        _Tipo = "4";
                        break;

                    case TipoDeAtributo.ValoresRV:
                        _Tipo = "5";
                        break;

                    case TipoDeAtributo.ValoresRF:
                        _Tipo = "6";
                        break;

                    case TipoDeAtributo.ListaDeValores:
                        _Tipo = "7";
                        break;

                    case TipoDeAtributo.Sistema:
                        _Tipo = "8";
                        break;

                    default:
                        throw new ArgumentException("No existe el tipo de atributo");
                }
            }
        }        
        /// <summary>
        /// Si el atributo es multivaluado.
        /// </summary>
        public bool Multivaluado { get; set; }
        /// <summary>
        /// Si el atributo es obligatorio.
        /// </summary>
        public bool Obligatorio { get; set; } 
        /// <summary>
        /// Cual atributo se despliega primero.
        /// </summary>
        public int? Orden { get; set; }  
        /// <summary>
        /// Ej:
        /// Ninguno
        /// </summary>
        public string ValorPorDefecto { get; set; } 
        /// <summary>
        /// Lista de valores de un atributo. Ej:
        /// Lista de las Profesiones
        /// </summary>
        public IList<ValorDeAtributo> Valores { get; set; } 
        /// <summary>
        /// Calificadores de los Valores
        /// </summary>
        public IList<CalificadorDeAtributo> CalificadoresDeValores { get; set; }   // CAS_SCODIGO comienza por V 
        //Aqui se definen cosas comunes para cada profesion, o informacion contable relacionada al valor del atributo que no varia por persona.       
        public IList<CalificadorDeAtributo> CalificadoresDeAtributos { get; set; }  // CAS_SCODIGO comienza por C 
        // Aqui se definen cosas almacenadas a nivel de la persona clasificada
    }

    public partial class Atributo
    {
        public string _Tipo { get; set; }
    }
}
